#include "user_manage.h" //

#define BACKUP_NUM 3 // 备份数量
#define BACKUP_FNAME "./file_data/packup_user_inf"

// 文件备份
void user_Update_data(vector v) // 没做文件打开失败检测
{
    char backup[3][100] = {""};
    int i = 0;
    FILE *new_file;
    // 备份逻辑用backup_dataT*备份文件，
    for (i = 0; i < BACKUP_NUM; i++)
    {
        sprintf(backup[i], "%sT%d.bin", BACKUP_FNAME, i); // 将文件名输入进 backup数组

        // printf("%s\n", backup[i]);

        new_file = fopen(backup[i], "a+"); // 没备份文件创建备份文件，有则打开不影响
        fclose(new_file);
    }

    remove(backup[2]); // 删除最后一个备份文件

    for (i = BACKUP_NUM - 1; i > 0; i--)
    {
        rename(backup[i - 1], backup[i]);
    }

    new_file = fopen(backup[0], "w"); // 先备份
    fwrite(v->buff, sizeof(union elem_vector) * v->size, 1, new_file);
    fclose(new_file);

    new_file = fopen(USER_DATA_FILE, "w"); // 再写入数据文件
    fwrite(v->buff, sizeof(union elem_vector) * v->size, 1, new_file);
    fclose(new_file);

    // rename(backup[0], "main_file.bin");
}

void user_Vector_Del(vector v)
{
    int i = 0, j = 0;
    char YN_Del, c;
    char temp_ID[30] = "";
    elem_type **temp = NULL; // 二重指针存储是否需要修改的文件，批量删除的雏形。

    printf("\n---------删除-----------\n");

    while (1)
    {
        temp = realloc(temp, sizeof(elem_type *) * (j + 1));
        printf("请输入用户%s", user_gfind_v[0]);
        printf("\n:>");
        scanf("%s", temp_ID);

        YN_Del = getchar();
        while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
            ;

        if (NULL != (temp[j] = user_find_data(v, temp_ID, user_func_array[0], 0)))
        {
            printf("该用户信息为:\n");
            user_show_inf(temp[j]);
            printf("\n是否删除？(Y/N)");

            YN_Del = getchar();
            while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
                ;

            if (YN_Del == 'Y' || YN_Del == 'y') // 确定删除则保存该地址,否则清除该用户地址
            {
                j++;
            }
            else
            {
                temp[j] = NULL;
            }
        }
        else
        {
            printf("no find\n");
        }

        printf("\n是否继续？(Y/N)");

        YN_Del = getchar();
        while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
            ;

        if (YN_Del == 'N' || YN_Del == 'n')
            break;
    }

    printf("是否保存操作？(Y/N)");

    YN_Del = getchar();
    while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
        ;

    if (YN_Del == 'Y' || YN_Del == 'y')
    {
        while (j > 0) // 连续删除
        {
            memset(temp[--j], '\0', sizeof(elem_type));
        }
        printf("更新数据中\n");
        user_Update_data(v); // 保存并备份
                             // sleep(1);
        printf("更新成功\n");
    }
    else
    {
        printf("未能保存\n");
        // sleep(1);
    }

    //
    // printf("更新备份数据");

    return;
}

// temp = realloc(temp, sizeof(struct _role_inf *) * (j + 1));
// printf("请输入商品ID");
// printf("\n:>");
// scanf("%s", temp_ID);

// YN_Del = getchar();
// while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
//     ;

// if (NULL != (temp[j] = find_data(v, temp_ID, user_func_array[0], 0)))
// {
//     printf("该商品信息为:\n");
//     show_inf(temp[j]);
//     printf("\n是否删除？(Y/N)");

//     YN_Del = getchar();
//     while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
//         ;

//     if (YN_Del == 'Y' || YN_Del == 'y') // 确定删除则保存该地址否则不管
//     {
//         j++;
//     }
//     else
//     {
//         temp[j] = NULL;
//     }
// }
// else
// {
//     printf("no find\n");
// }

// printf("\n是否继续？(Y/N)");

// YN_Del = getchar();
// while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
//     ;

// if (YN_Del == 'N' || YN_Del == 'n')
//     break;
